package com.dhb.pattern.singleton.lazy;

/**
 * 功能描述：//这种形式兼顾饿汉式的内存浪费， 也兼顾 synchronized 性能问题
 *          //完美地屏蔽了这两个缺点
 * 创建人：citymoon
 * 创建日期：2019/5/4
 */
public class LazyInnerClassSingleton {

    //默认使用 LazyInnerClassGeneral 的时候， 会先初始化内部类
    //如果没使用的话， 内部类是不加载的
    private LazyInnerClassSingleton(){
        //加if判断，是为了避免通过反射，强制通过构造方法进行多次实例化的问题。
        if(LazyHolder.LAZY != null){
            throw new RuntimeException("不允许创建多个实例");
        }
    }

    public static final LazyInnerClassSingleton getInstance(){
        //在返回结果以前， 一定会先加载内部类
        return LazyHolder.LAZY;
    }

    //默认不加载
    private static class LazyHolder{
        private static final LazyInnerClassSingleton LAZY = new LazyInnerClassSingleton();
    }
}
